﻿/*
Mainlist 表中的checkbox复选变色
文本输入事件，同步复选框

用法：
1.要控制的控件必须在 class="mainlist"的表格内 
2.对于全选复选框，其"name"属性必须为 "chkAll"

Copyright 2009 by ligang 
Free for non-commercial use
*/



function initMainlist() {

    $('.mainlist input[type=text]').keydown(
         function(e) {
             //Tab键
             if (e.keyCode == 9) {
                 var trElementNext = $(this).parents("tr").next();
                 if (!trElementNext.is("tr")) {
                     trElementNext = $(this).parents(".mainlist").find('tr').eq(1);
                 }
                 var txtElement = trElementNext.find('input[type=text]').eq(0);
                 txtElement.focus();
                 txtElement.val(txtElement.val());
                 return false;
             }
             //向上键
             if (e.keyCode == 38) {
                 var trElementPrev = $(this).parents("tr").prev();
                 var txtElement = trElementPrev.find('input[type=text]').eq(0);
                 txtElement.focus();
                 txtElement.val(txtElement.val());
                 return false;
             }
             //向下键
             if (e.keyCode == 40) {
                 var trElementNext = $(this).parents("tr").next();
                 var txtElement = trElementNext.find('input[type=text]').eq(0);
                 txtElement.focus();
                 txtElement.val(txtElement.val());
                 return false;
             }

         });
         
         
     /*文本框输入事件处理，同步选中复选框 */
         $('.mainlist input[type=text]').keyup(
         function(e) {
             //仅处理数字按键，删除键的事件
         if ((e.keyCode > 95 && e.keyCode < 106) || (e.keyCode > 47 && e.keyCode < 59) || e.keyCode == 8 || e.keyCode==46) {
                 var txtValue = $(this).val();
                 var trElement = $(this).parents("tr");
                 var cbElement = $(this).parents("tr").find('input[type=checkbox]');

                 //禁用的复选框不参与操作
                 if (!cbElement.attr("disabled")) {
                     if (txtValue.length == 0 || txtValue == "0") {
                         trElement.removeClass("selected");
                         cbElement.removeAttr("checked");
                     }
                     else {
                         trElement.addClass("selected");
                         cbElement.attr("checked", "true");
                     }
                 }
             }
         });
     /*下拉框输入事件处理，同步选中复选框 */
     $('.mainlist select').change(
     function(e) {
             var trElement = $(this).parents("tr");
             var cbElement = $(this).parents("tr").find('input[type=checkbox]');

             //禁用的复选框不参与操作
             if (!cbElement.attr("disabled")) {
                     trElement.addClass("selected");
                     cbElement.attr("checked", "true");
                 }
     });
    //单选变色
    $('.mainlist input[type=checkbox]').not('input[name=chkAll]').click(
         function() {

             var trElement = $(this).parents("tr");
             var cbElement = $(this);
             if (cbElement.attr("checked")) {
                 trElement.addClass("selected");
             }
             else {
                 trElement.removeClass("selected");
             }

         });

    //全选变色
         $('.mainlist input[name=chkAll]').click(
         function() {

             var cbElements = $(this).parents(".mainlist").find('input[type=checkbox]').not('input[name=chkAll]');
             cbElements.each(function() {

             var trElement = $(this).parents(".mainlist tr").slice(-1);
                 var cbElement = $(this);
                 var chkAll = $('.mainlist input[name=chkAll]');

                 //禁用的复选框不参与操作
                 if (!cbElement.attr("disabled")) {
                     if (chkAll.attr("checked")) {
                         trElement.addClass("selected");
                         cbElement.attr("checked", "true");
                     }
                     else {
                         trElement.removeClass("selected");
                         cbElement.removeAttr("checked");
                     } 
                 }
             })
         });

}
$(document).ready(function() { initMainlist(); });